package com.yjc.dp;

/**
 * 面试题 05.03. 翻转数位
 *
 * @author yjc
 * @create 2024-07-24 14:43
 */
public class Subject_10 {
    public static void main(String[] args) {
        int num = -2;

        //二进制
        String numStr = Integer.toBinaryString(num);
        int n = numStr.length();
        int j = 1;//记录上一个 0 的下标

        int[] dp = new int[n + 1];
        int maxVal = Integer.MIN_VALUE;

        for (int i = 1; i <= n; i++) {
            if (numStr.charAt(i - 1) == '1') {
                dp[i] = dp[i - 1] + 1;
            } else {
                maxVal = Integer.max(maxVal, dp[i - 1] + dp[j - 1]);
                dp[i] = 0;
                j = i;
            }
        }
        maxVal = Integer.max(maxVal, dp[n] + dp[j - 1]) + 1;

        if (num < 0 && !numStr.contains("0")) {//负数二进制会采用补码表示，需要特殊处理
            maxVal--;
        }

        System.out.println(maxVal);


    }
}
